<?php

/**
 * autenticacion actions.
 *
 * @package    sifi
 * @subpackage autenticacion
 * @author     John R.Q.
 * @version    SVN: $Id: actions.class.php 2692 2006-11-15 21:03:55Z fabien $
 */
 
//require_once("logReportes.class.php");
 
class autenticacionActions extends sfActions
{
	/**
	* Presenta la interf�z de logueo de la aplicaci�n y permite realizar la vaidaci�n de los usuarios
    * verificando el certificado por el login
	* El control del certificado lo hace el servidor Web, asi que no se requiere verificar el 
    * por password, sin embargo se valido para aumentar la seguridad
	*
	* @author 	John R.Q. <jorquin@univalle.edu.co>
	* @access    public
	* @copyright OITEL, Universidad del Valle 2.007
	* @since    2007-10-23 
	* @return  
	*/
  var $email_usuario = "";
     	
  public function executeIndex()
  {
  	//$this->div_error = Kernel::divError();
  	if ( Kernel::getUser()->isAuthenticated() )
  		//return $this -> redirect ( 'autenticacion/establecerGrupoDeTrabajo' );
  		return $this->redirect('inicio/');
  	else 
  	{
  		Kernel::getUser()->getAttributeHolder()->clear();
  		//return sfView::SUCCESS;
  	}
	/************************************************************************
	En caso de que el usuario tenga certificado, se env�a directamenta al ingreso de la aplicacion
	*******************************************************************/
	/*if( $this->usuarioUsaCertificado() )
	{
		$validacion = new validacionLogin();
		if ( $validacion -> registrarUsuario($this->email_usuario) )
			return $this -> redirect('autenticacion/establecerGrupoDeTrabajo');
		else 
		{
			$log = new logReportes();
			$this->login_error = "El usuario no existe en la base de datos";
			$log->logMensaje("[Usuario ".$this->email_usuario." con certificado] ".$this->login_error, "info");
			return $this->setTemplate("index");
		}
	}*/
	/************************************************************************
	Si los par�metros los pasan por GET regresa a la interfaz de logueo
	************************************************************************/
	/*if ( $this->getRequest()->getMethod() != sfRequest::POST )
	{
		$this -> getRequest () -> setAttribute ( 'referer', $this -> getRequest () -> getReferer () );
		return sfView::SUCCESS;
	}
	else */
	/************************************************************************
	En caso de que pase las validaciones entonces entra al else, osea se redirecciona al panel de usuario
	************************************************************************/
	/*{
		return $this ->redirect ('autenticacion/establecerGrupoDeTrabajo');
	}*/
  }



	/**
	* Valida que los campos solicitados en la interf�z de ingreso se hayan suministrado
	*
	* @author 	John R.Q. <jorquin@univalle.edu.co>
	* @access    public
	* @copyright OITEL, Universidad del Valle 2.007
	* @since    2007-10-23 
	* @return  sfView::SUCCESS en caso de que la validaci�n determine un error
	*/
  public function handleErrorIndex()
  {
	return sfView::SUCCESS;
	//$this->forward('autenticacion', 'index');
  }


  
	/**
	* Establece el grupo con el cual el usario ingresara a la aplicacion
	* Si el usario tiene solo un grupo lo ingresa directamente
    * Si no tiene detiene el scrip
    * Si tiene mas de un grupo despliega lo forma que que el usuario seleccione el grupo
    * Si la contrase�a ha caducado lo redirecciona para que la cambie
	*
	* @author 	John R.Q. <jorquin@univalle.edu.co>
	* @access    private
	* @copyright OITEL, Universidad del Valle 2.007
	* @since    2007-10-24 
	* @return 
	*/
  public function executeEstablecerGrupoDeTrabajo ( )
  {
    return $this->redirect('inicio');
  
  //Cmentado para usarlo luego 
	//$usu_login = Kernel::getLogin(); //$this -> getContext () -> getUser () -> getAttribute('login');
	//$validacion = new validacionLogin();

	/************************************************************************
	En caso de que el usuario tenga vencida la contrase�a se redireccion al panel para que la cambie
	************************************************************************/	
	/**
	if ( $validacion -> contrasenaDeUsuarioHaExpirado($usu_login) )
	{
		$log = new logReportes();
		$error = "La contrase�a del usuario ".$usu_login." ha expirado ";
		$log->logMensaje($error, "info");
		//return $this->forward("cambioClave", "index");
		return $this->redirect("cambioClave/index");
	}

	$c  = new Criteria();
	$c -> add(UsuarioporgrupotrabajoaplicacionPeer::UGT_LOGIN, $usu_login );
	$filas = UsuarioporgrupotrabajoaplicacionPeer::doCount($c);
	switch($filas)
	{
		case 0:	{
				$this->login_error = "Usted no tiene asociado un grupo de trabajo";
				$log = new logReportes();
				$log->logMensaje("Usuario ".$usu_login." ".$this->login_error, "info");
			    return $this->setTemplate("index");
			    }
		break;
		
		case 1:	$usuarioGrupoTrabajo = UsuarioporgrupotrabajoaplicacionPeer::doSelectOne($c);
				$usu_gta_nombre = isset($usuarioGrupoTrabajo)? $usuarioGrupoTrabajo->getUgtGtaNombre() : "sin grupo";
				//$this -> getContext () -> getUser () -> setAttribute ( 'usu_gta_nombre', $usu_gta_nombre );
				Kernel::setGrupoTrabajo($usu_gta_nombre);
                $grupo = $usuarioGrupoTrabajo->getGrupotrabajoaplicacion();
                Kernel::setIPsAutorizados($usu_gta_nombre, $grupo->getGtaIpsAutorizados()); 
				return $this->redirect('inicio');
		break;
		
		default:$this->nombresGrupoTrabajo = array();
				
				$c->add(UsuarioporgrupotrabajoaplicacionPeer::UGT_LOGIN, $usu_login );
				$usuariosGrupoTrabajo = UsuarioporgrupotrabajoaplicacionPeer::doSelect($c);
				
				foreach ( $usuariosGrupoTrabajo as $usuarioGrupoTrabajo )
				{
					$grupoTrabajo =GrupotrabajoaplicacionPeer::retrieveByPk($usuarioGrupoTrabajo->getUgtGtaNombre());
					array_push($this->nombresGrupoTrabajo, $grupoTrabajo->getGtaNombre() );
				}
				return sfView::SUCCESS;
		break;
	}*/
  }



	/**
	* Se encarga de dar acceso al sistema despues de que se ha determinado con que perfil se va a ingresar.
	* Se usa cuando el usuario tien mas de un perfil relacionado y tiene que seleccionar con cual ingresa.
	*
	* @author 	John R.Q. <jorquin@univalle.edu.co>
	* @access    public
	* @copyright OITEL, Universidad del Valle 2.007
	* @since    2007-10-23 
	* @return  
    * 
    * Cambios:
    * 
    * 21-02-2008 geacosta
    * Se modifico la funcion para que registre en la session de usuario los ips autorizados por grupo para la ejecucion 
    * de acciones del sistema.
    * 
	*/
  function executeAccesar()
  {
  	$gta_nombre = $this->getRequestParameter('usu_gta_nombre');
  	//$this -> getContext () -> getUser () -> setAttribute ( 'usu_gta_nombre', $gta_nombre );
  	Kernel::setGrupoTrabajo($gta_nombre);
    $grupo = GrupotrabajoaplicacionPeer::retrieveByPK($gta_nombre);
    Kernel::setIPsAutorizados($gta_nombre, $grupo->getGtaIpsAutorizados()); 
  	return $this->redirect( 'inicio' );
  }



	/**
	* Se encarga de cancelar los datos de logueo de usuario
	*
	* @author 	John R.Q. <jorquin@univalle.edu.co>
	* @access    public
	* @copyright OITEL, Universidad del Valle 2.007
	* @since    2007-10-23 
	* @return  
	*/
  public function executeSalir ()
  {
  	$this->getUser()->setAuthenticated( false );
	  $this->getUser()->clearCredentials();
    $this->getContext()->shutdown();
    //return $this -> redirect ( 'autenticacion/index' );
    return $this->redirect( 'inicio/' );
  }



	/**
	* Se encarga de determinar si la persona que accesa al sistema usa certificado
	*
	* @author 	John R.Q. <jorquin@univalle.edu.co>
	* @access    public
	* @copyright OITEL, Universidad del Valle 2.007
	* @since    2007-10-23 
	* @return  boolean
	*/
  function usuarioUsaCertificado ()
  {
  	if( isset($_SERVER["SSL_CLIENT_S_DN_Email"]) )
	{
		$this->email_usuario = $_SERVER["SSL_CLIENT_S_DN_Email"];
		$informacion_email = explode('@',$this->email_usuario);
		$this->email_usuario = $informacion_email[0];
	}

	//$this->email_usuario = "rijarami";//solo para las pruebas
	return $this->email_usuario!=""? TRUE : FALSE;
  }

	
}
